好像斷更了,但沒關係,跟我一起挑戰的朋友有持續下去的樣子。
今天也是一個跟閱讀測驗鬥智鬥勇的題目,而且最後搞出來的程式碼大概40行
你真的是easy題目嗎......
返回二元樹中最常出現的數字,二元樹的規則是左邊小於等於,右邊大於等於。
看起來是不難,但問題是我對於這個資料結構很陌生......所以基本上都是叫AI來搞定。
現在我知道我那個朋友昨天說的:「管科的跑來修完資結之後都會很頹喪」的那種感覺,雖然我不是管科就是了。
原本我是叫AI直接扁平化然後數數字,但後來想想其實也不用,直接歷遍應該也是沒問題。而且他還找了一個酷酷的歷遍方式。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def findMode(self, root: Optional[TreeNode]) -> List[int]:
if not root:
return []
# 初始化相关变量
self.prev_val = None
self.current_count = 0
self.max_count = 0
self.modes = []
# 中序遍历函数
def inorder(node):
if not node:
return
inorder(node.left)
# 更新当前数字出现次数
if self.prev_val == node.val:
self.current_count += 1
else:
self.current_count = 1
self.prev_val = node.val
# 检查是否需要更新模式列表
if self.current_count == self.max_count:
self.modes.append(node.val)
elif self.current_count > self.max_count:
self.max_count = self.current_count
self.modes = [node.val]
inorder(node.right)
# 执行中序遍历
inorder(root)
return self.modes